// import com.alibaba.druid.sql.ast.SQLExpr;
// import com.alibaba.druid.sql.ast.SQLName;
// import com.alibaba.druid.sql.dialect.sqlserver.ast.SQLServerObjectImpl;
// import com.alibaba.druid.sql.dialect.sqlserver.ast.SQLServerStatement;
// import com.alibaba.druid.sql.dialect.sqlserver.ast.SQLServerStatementImpl;
// import com.alibaba.druid.sql.dialect.sqlserver.visitor.SQLServerASTVisitor;

// import java.util.ArrayList;
// import java.util.List;
#pragma once
#include "../SQLServerStatementImpl.h"
#include "../SQLServerStatement.h"
#include "../SQLServerObjectImpl.h"

class SQLServerExecStatement_SQLServerParameter : virtual public SQLServerObjectImpl
{
public:
  SQLExpr_ptr expr;
  // sql server 支持参数只有input 和 output 两种
  BOOL_ptr type;

  SHAREDOBJECT(SQLServerExecStatement_SQLServerParameter);
  SQLExpr_ptr getExpr();

  void setExpr(SQLExpr_ptr expr);

  BOOL_ptr getType();

  void setType(BOOL_ptr type);

  // @Override
  void accept0(SQLServerASTVisitor_ptr visitor);
};

class SQLServerExecStatement : virtual public SQLServerStatementImpl, virtual public SQLServerStatement
{
public:
  SQLName_ptr returnStatus;
  SQLName_ptr moduleName;
  SQLServerExecStatement_SQLServerParameter_list_ptr parameters;

  SQLServerExecStatement();
  SHAREDOBJECT(SQLServerExecStatement);
  
  SQLName_ptr getModuleName();

  void setModuleName(SQLName_ptr moduleName);

  SQLServerExecStatement_SQLServerParameter_list_ptr getParameters();

  void accept0(SQLServerASTVisitor_ptr visitor);

  SQLName_ptr getReturnStatus();

  void setReturnStatus(SQLName_ptr returnStatus);
};
